{
  "cells": [
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "## Complex Filtering with FFmpeg\n",
        "\n",
        "### Introduction to FFmpeg's Filter System\n",
        "FFmpeg's versatility and power largely stem from its comprehensive filter system, allowing for complex video and audio processing. The typed-ffmpeg library maintains this capability, providing a user-friendly interface for applying various filters.\n",
        "\n",
        "### Applying Basic Filters\n",
        "Below is an example of how to trim a video and add a text watermark using FFmpeg's filter functions:\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 5,
      "metadata": {},
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "Exception reporting mode: Minimal\n"
          ]
        },
        {
          "data": {
            "image/png": "iVBORw0KGgoAAAANSUhEUgAABawAAAA7CAYAAACXBc1hAAAABmJLR0QA/wD/AP+gvaeTAAAgAElEQVR4nO3dd3gUxRsH8G8aJSEhtNBb6FU6oRoIIiDSpCSho4IgKkpRLDRFbGD0J0oRRapElCqCQOgJvUgIPYQOoRMIISG53x9vjuu5vdxecgnfz/PkUfb2dmf3ZndmZ2fecdFoNBoQEREREREREREREWUz1+xOABERERERERERERERwAZrIiIiIiIiIiIiInISbLAmIiIiIiIiIiIiIqfgbrzg0qVLiIyMzI60UBYoW7YsmjVrlt3JICvCw8OzOwlElMPxfp+7sH5GRET07GF9LndhfY7IvObNm6NMmTIGy1yMJ10MDw9Hnz59sjRhlHV69uyJP/74I7uTQVa4uLhkdxKIKIfj/T53Yf2MiIjo2cP6XO7C+hyRecuWLUPv3r0Nlpn0sNaavd/h6aEsNvv97E4B2WLZNKD3C9mdCiLKiXrxfp9raVg/IyIieiawPpd7zd6vsb4S0TNiWCPzHTYZw5qIiIiIiIiIiIiInAIbrImIiIiIiIiIiIjIKbDBmoiIiIiIiIiIiIicgsUY1kT2SkhIwKxZs7Br1y6kpqaiadOmGDFiBAoXLpzdSctQTk03EZGzy6n315yabiIiIiJHuHbtGiZMmICzZ89i8+bN2Z0cRVifI8pZ2MOaHOLatWto2LAhfv31V/Tp0wcDBw7EihUrULduXcTGxmZ38izKqekmInJ2OfX+mlPTTURERKS2lJQUzJgxA/Xr18eCBQuwbdu27E6SIqzPEeU87GFNDvHaa6/h8uXLOHXqFEqXLg0ACAoKQtWqVdG3b19ERUVlcwrNy6npJiJydjn1/ppT001ERESktldffRXx8fGIjIxEq1atcO3atexOkiKszxHlPOxhTao7duwY/v77b3Tv3v1pYQAAhQoVQmhoKHbv3o0dO3bYtY9Ro0Zhz5499ibVQFakm4joWcRygYiIiCjnGzduHNavX4+KFSs6ZPuszxGRFhusSXXr1q0DALRo0cLks5YtWwIA1q5da9c+Fi5ciICAAFSpUgWTJk3C6dOn7doekDXpJiJ6FrFcICIiIsr5ateu7dDtsz5HRFpssCbVHT16FADMvnWtUKECACA6OtqufVy+fBnh4eGoUaMGPv/8c1StWhVNmzbF999/j/j4+ExtMyvSTUSU20REROCNN95Ap06d0KNHD0yfPh03btwwWIflAhEREZHzUlKfywqszxGRFhusSXXagq1gwYImn/n4+AAAbt68adc+8uXLh169emH16tW4evUqZs6cCTc3N7zzzjsoVaoUOnbsiMWLF+Phw4dOlW4iotxkxowZaN++PYoUKYK33noLffr0wapVq1CmTBkcOHDg6XosF4iIiIick9L6XFZgfY6ItNhgTapLSUkBALi5uZl85u4u83wmJyertr8iRYpgxIgRiIyMxJkzZ/DJJ5/g7Nmz6NevH4oXL45hw4Y5ZbqJiHK62bNno3nz5pg6dSo6duyIPn36YMOGDfD19UVCQsLT9VguEBERETknpfW5rMb6HNGzjQ3WpDpvb28AQFJSkslnjx49MljHknPnziEwMNDg77vvvrO670qVKuGDDz7AtGnTUKVKFTx8+BCrVq3KsnQTET1LKlasiP3792PJkiVPK/r58+fHhg0bUK9evafrsVwgIiIick5K63NqYH2OiJRyz+4EUO6jjQ117do1k8+uX79usI4lfn5+mDRpksEy/Rl9jaWlpWHbtm1YvHgxli9fjnv37qFy5cqYMGEC+vXrl2XpJiJ6lixcuBAffPABhg4diuHDhyMgIABt2rRBv3794Ovr+3Q9lgtEREREzklpfU4NrM8RkVLsYU2qa968OQDzExdolzVr1izDbXh5eZm8ea1SpYrJev/99x/GjRuH8uXLo23btli9ejX69++PqKgonD59GpMnTzb7PUelm4joWVKsWDHMmzcPt27dwrp169CoUSN89913qFatGtavX/90PZYLRERERM5JaX1ODazPEZFSDu1hffogcOYw0HGIfeuQOLEXOH0YKFsVqBeY3amxrGPHjihSpAhWr16NKVOmGHy2evVqeHl54ZVXXrFrH1999RUWLlyI6OhoeHp6omvXrujXrx/at2//NA6VM6bbUQ6fAlZulf/Plwf4YJDh5zfvAqu2ATfuADUqAi+1BNz1QnhduwXM+lP371EhgK+Ko6IuXAN+WQ0M7Q6UKqbedsnQ3QTgry1yvrsFAvWqml/PWn7ITtsPAjsPAx/aWSakPAG27AeOxQIF8gNNagHPqXg+rF1z1mT3NamWzp074+eff0aJEiXQokULtGjRAiNHjkTp0qURFhaGDh06AGC5kF1WbpW8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",
            "image/svg+xml": [
              "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n",
              "<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
              " \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
              "<!-- Generated by graphviz version 2.43.0 (0)\n",
              " -->\n",
              "<!-- Title: %3 Pages: 1 -->\n",
              "<svg width=\"1089pt\" height=\"44pt\"\n",
              " viewBox=\"0.00 0.00 1089.00 44.00\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
              "<g id=\"graph0\" class=\"graph\" transform=\"scale(1 1) rotate(0) translate(4 40)\">\n",
              "<title>%3</title>\n",
              "<polygon fill=\"white\" stroke=\"transparent\" points=\"-4,4 -4,-40 1085,-40 1085,4 -4,4\"/>\n",
              "<!-- 27014b6428407dd7 -->\n",
              "<g id=\"node1\" class=\"node\">\n",
              "<title>27014b6428407dd7</title>\n",
              "<polygon fill=\"#99cc00\" stroke=\"black\" points=\"89,-36 0,-36 0,0 89,0 89,-36\"/>\n",
              "<text text-anchor=\"middle\" x=\"44.5\" y=\"-14.9\" font-family=\"Helvetica,sans-Serif\" font-size=\"12.00\">&#45;i input.mp4</text>\n",
              "</g>\n",
              "<!-- 5ff1d9d84e088f37 -->\n",
              "<g id=\"node2\" class=\"node\">\n",
              "<title>5ff1d9d84e088f37</title>\n",
              "<polygon fill=\"#ffcc00\" stroke=\"black\" points=\"374,-36 169,-36 169,0 374,0 374,-36\"/>\n",
              "<text text-anchor=\"middle\" x=\"271.5\" y=\"-14.9\" font-family=\"Helvetica,sans-Serif\" font-size=\"12.00\">[0] trim= start=10:end=20 [s0]</text>\n",
              "</g>\n",
              "<!-- 27014b6428407dd7&#45;&gt;5ff1d9d84e088f37 -->\n",
              "<g id=\"edge1\" class=\"edge\">\n",
              "<title>27014b6428407dd7&#45;&gt;5ff1d9d84e088f37</title>\n",
              "<path fill=\"none\" stroke=\"black\" d=\"M89.15,-18C109.14,-18 133.85,-18 158.52,-18\"/>\n",
              "<polygon fill=\"black\" stroke=\"black\" points=\"158.71,-21.5 168.71,-18 158.71,-14.5 158.71,-21.5\"/>\n",
              "<text text-anchor=\"middle\" x=\"129\" y=\"-21.8\" font-family=\"Times,serif\" font-size=\"14.00\">0 &#45;&gt; 0</text>\n",
              "</g>\n",
              "<!-- 55934c8a5f60ebf1 -->\n",
              "<g id=\"node3\" class=\"node\">\n",
              "<title>55934c8a5f60ebf1</title>\n",
              "<polygon fill=\"#ffcc00\" stroke=\"black\" points=\"845,-36 462,-36 462,0 845,0 845,-36\"/>\n",
              "<text text-anchor=\"middle\" x=\"653.5\" y=\"-14.9\" font-family=\"Helvetica,sans-Serif\" font-size=\"12.00\">[s0] drawtext= text=Hello World:fontsize=12:x=10:y=10 [s1]</text>\n",
              "</g>\n",
              "<!-- 5ff1d9d84e088f37&#45;&gt;55934c8a5f60ebf1 -->\n",
              "<g id=\"edge2\" class=\"edge\">\n",
              "<title>5ff1d9d84e088f37&#45;&gt;55934c8a5f60ebf1</title>\n",
              "<path fill=\"none\" stroke=\"black\" d=\"M374.33,-18C398.41,-18 424.91,-18 451.7,-18\"/>\n",
              "<polygon fill=\"black\" stroke=\"black\" points=\"451.98,-21.5 461.98,-18 451.98,-14.5 451.98,-21.5\"/>\n",
              "<text text-anchor=\"middle\" x=\"418\" y=\"-21.8\" font-family=\"Times,serif\" font-size=\"14.00\">s0 &#45;&gt; 0</text>\n",
              "</g>\n",
              "<!-- 746fd3fe15bfa8a9 -->\n",
              "<g id=\"node4\" class=\"node\">\n",
              "<title>746fd3fe15bfa8a9</title>\n",
              "<polygon fill=\"#99ccff\" stroke=\"black\" points=\"1081,-36 933,-36 933,0 1081,0 1081,-36\"/>\n",
              "<text text-anchor=\"middle\" x=\"1007\" y=\"-14.9\" font-family=\"Helvetica,sans-Serif\" font-size=\"12.00\">&#45;map [s1] output.mp4</text>\n",
              "</g>\n",
              "<!-- 55934c8a5f60ebf1&#45;&gt;746fd3fe15bfa8a9 -->\n",
              "<g id=\"edge3\" class=\"edge\">\n",
              "<title>55934c8a5f60ebf1&#45;&gt;746fd3fe15bfa8a9</title>\n",
              "<path fill=\"none\" stroke=\"black\" d=\"M845.17,-18C872.3,-18 898.95,-18 922.52,-18\"/>\n",
              "<polygon fill=\"black\" stroke=\"black\" points=\"922.77,-21.5 932.77,-18 922.77,-14.5 922.77,-21.5\"/>\n",
              "<text text-anchor=\"middle\" x=\"889\" y=\"-21.8\" font-family=\"Times,serif\" font-size=\"14.00\">s1 &#45;&gt; 0</text>\n",
              "</g>\n",
              "</g>\n",
              "</svg>\n"
            ],
            "text/plain": [
              "OutputStream(node=OutputNode(kwargs=FrozenDict({}), inputs=(VideoStream(node=FilterNode(kwargs=FrozenDict({'text': 'Hello World', 'fontsize': 12, 'x': 10, 'y': 10}), inputs=(VideoStream(node=FilterNode(kwargs=FrozenDict({'start': 10, 'end': 20}), inputs=(AVStream(node=InputNode(kwargs=FrozenDict({}), inputs=(), filename='input.mp4'), index=None, optional=False),), name='trim', input_typings=(<StreamType.video: 'video'>,), output_typings=(<StreamType.video: 'video'>,)), index=0, optional=False),), name='drawtext', input_typings=(<StreamType.video: 'video'>,), output_typings=(<StreamType.video: 'video'>,)), index=0, optional=False),), filename='output.mp4'), index=None, optional=False)"
            ]
          },
          "execution_count": 5,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "%xmode Minimal\n",
        "import ffmpeg\n",
        "\n",
        "# Initialize the input stream from a video file\n",
        "input_stream = ffmpeg.input(\"input.mp4\")\n",
        "\n",
        "# Apply trimming and drawtext filters, then output to a new file\n",
        "(\n",
        "    input_stream.trim(start=10, end=20)\n",
        "    .drawtext(text=\"Hello World\", fontsize=12, x=10, y=10)\n",
        "    .output(filename=\"output.mp4\")\n",
        ")"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "This operation is visualized in the accompanying diagram, illustrating the workflow of trimming a video and adding a watermark.\n"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "### Applying Source Filters\n",
        "FFMpeg's source filters are also support\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 6,
      "metadata": {},
      "outputs": [
        {
          "data": {
            "image/png": "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",
            "image/svg+xml": [
              "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n",
              "<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
              " \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
              "<!-- Generated by graphviz version 2.43.0 (0)\n",
              " -->\n",
              "<!-- Title: %3 Pages: 1 -->\n",
              "<svg width=\"393pt\" height=\"44pt\"\n",
              " viewBox=\"0.00 0.00 393.00 44.00\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
              "<g id=\"graph0\" class=\"graph\" transform=\"scale(1 1) rotate(0) translate(4 40)\">\n",
              "<title>%3</title>\n",
              "<polygon fill=\"white\" stroke=\"transparent\" points=\"-4,4 -4,-40 389,-40 389,4 -4,4\"/>\n",
              "<!-- 601eb028ac0bb863 -->\n",
              "<g id=\"node1\" class=\"node\">\n",
              "<title>601eb028ac0bb863</title>\n",
              "<polygon fill=\"#ffcc00\" stroke=\"black\" points=\"149,-36 0,-36 0,0 149,0 149,-36\"/>\n",
              "<text text-anchor=\"middle\" x=\"74.5\" y=\"-14.9\" font-family=\"Helvetica,sans-Serif\" font-size=\"12.00\"> color= color=red [s0]</text>\n",
              "</g>\n",
              "<!-- 8619805b631cd61 -->\n",
              "<g id=\"node2\" class=\"node\">\n",
              "<title>8619805b631cd61</title>\n",
              "<polygon fill=\"#99ccff\" stroke=\"black\" points=\"385,-36 237,-36 237,0 385,0 385,-36\"/>\n",
              "<text text-anchor=\"middle\" x=\"311\" y=\"-14.9\" font-family=\"Helvetica,sans-Serif\" font-size=\"12.00\">&#45;map [s0] output.mp4</text>\n",
              "</g>\n",
              "<!-- 601eb028ac0bb863&#45;&gt;8619805b631cd61 -->\n",
              "<g id=\"edge1\" class=\"edge\">\n",
              "<title>601eb028ac0bb863&#45;&gt;8619805b631cd61</title>\n",
              "<path fill=\"none\" stroke=\"black\" d=\"M149.05,-18C173.61,-18 201.15,-18 226.41,-18\"/>\n",
              "<polygon fill=\"black\" stroke=\"black\" points=\"226.71,-21.5 236.71,-18 226.71,-14.5 226.71,-21.5\"/>\n",
              "<text text-anchor=\"middle\" x=\"193\" y=\"-21.8\" font-family=\"Times,serif\" font-size=\"14.00\">s0 &#45;&gt; 0</text>\n",
              "</g>\n",
              "</g>\n",
              "</svg>\n"
            ],
            "text/plain": [
              "OutputStream(node=OutputNode(kwargs=FrozenDict({}), inputs=(VideoStream(node=FilterNode(kwargs=FrozenDict({'color': 'red'}), inputs=(), name='color', input_typings=(), output_typings=(<StreamType.video: 'video'>,)), index=0, optional=False),), filename='output.mp4'), index=None, optional=False)"
            ]
          },
          "execution_count": 6,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "import ffmpeg\n",
        "\n",
        "# Apply trimming and drawtext filters, then output to a new file\n",
        "(ffmpeg.sources.color(color=\"red\").output(filename=\"output.mp4\"))"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 7,
      "metadata": {},
      "outputs": [
        {
          "data": {
            "image/png": "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",
            "image/svg+xml": [
              "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n",
              "<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
              " \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
              "<!-- Generated by graphviz version 2.43.0 (0)\n",
              " -->\n",
              "<!-- Title: %3 Pages: 1 -->\n",
              "<svg width=\"520pt\" height=\"98pt\"\n",
              " viewBox=\"0.00 0.00 520.00 98.00\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
              "<g id=\"graph0\" class=\"graph\" transform=\"scale(1 1) rotate(0) translate(4 94)\">\n",
              "<title>%3</title>\n",
              "<polygon fill=\"white\" stroke=\"transparent\" points=\"-4,4 -4,-94 516,-94 516,4 -4,4\"/>\n",
              "<!-- 27014b6428407dd7 -->\n",
              "<g id=\"node1\" class=\"node\">\n",
              "<title>27014b6428407dd7</title>\n",
              "<polygon fill=\"#99cc00\" stroke=\"black\" points=\"159.5,-90 70.5,-90 70.5,-54 159.5,-54 159.5,-90\"/>\n",
              "<text text-anchor=\"middle\" x=\"115\" y=\"-68.9\" font-family=\"Helvetica,sans-Serif\" font-size=\"12.00\">&#45;i input.mp4</text>\n",
              "</g>\n",
              "<!-- 5ca55cbb9d826b79 -->\n",
              "<g id=\"node3\" class=\"node\">\n",
              "<title>5ca55cbb9d826b79</title>\n",
              "<polygon fill=\"#99ccff\" stroke=\"black\" points=\"512,-63 318,-63 318,-27 512,-27 512,-63\"/>\n",
              "<text text-anchor=\"middle\" x=\"415\" y=\"-41.9\" font-family=\"Helvetica,sans-Serif\" font-size=\"12.00\">&#45;map 0 &#45;map [s0] output.mp4</text>\n",
              "</g>\n",
              "<!-- 27014b6428407dd7&#45;&gt;5ca55cbb9d826b79 -->\n",
              "<g id=\"edge1\" class=\"edge\">\n",
              "<title>27014b6428407dd7&#45;&gt;5ca55cbb9d826b79</title>\n",
              "<path fill=\"none\" stroke=\"black\" d=\"M159.65,-68.05C198.45,-64.53 256.76,-59.25 307.77,-54.62\"/>\n",
              "<polygon fill=\"black\" stroke=\"black\" points=\"308.22,-58.1 317.87,-53.71 307.59,-51.13 308.22,-58.1\"/>\n",
              "<text text-anchor=\"middle\" x=\"274\" y=\"-62.8\" font-family=\"Times,serif\" font-size=\"14.00\">0 &#45;&gt; 0</text>\n",
              "</g>\n",
              "<!-- 55bc5ec35bdb2b9a -->\n",
              "<g id=\"node2\" class=\"node\">\n",
              "<title>55bc5ec35bdb2b9a</title>\n",
              "<polygon fill=\"#ffcc00\" stroke=\"black\" points=\"230,-36 0,-36 0,0 230,0 230,-36\"/>\n",
              "<text text-anchor=\"middle\" x=\"115\" y=\"-14.9\" font-family=\"Helvetica,sans-Serif\" font-size=\"12.00\"> color= color=red:size=hd1080 [s0]</text>\n",
              "</g>\n",
              "<!-- 55bc5ec35bdb2b9a&#45;&gt;5ca55cbb9d826b79 -->\n",
              "<g id=\"edge2\" class=\"edge\">\n",
              "<title>55bc5ec35bdb2b9a&#45;&gt;5ca55cbb9d826b79</title>\n",
              "<path fill=\"none\" stroke=\"black\" d=\"M230.36,-28.36C255.75,-30.66 282.56,-33.09 307.62,-35.36\"/>\n",
              "<polygon fill=\"black\" stroke=\"black\" points=\"307.59,-38.87 317.87,-36.29 308.22,-31.9 307.59,-38.87\"/>\n",
              "<text text-anchor=\"middle\" x=\"274\" y=\"-36.8\" font-family=\"Times,serif\" font-size=\"14.00\">s0 &#45;&gt; 1</text>\n",
              "</g>\n",
              "</g>\n",
              "</svg>\n"
            ],
            "text/plain": [
              "OutputStream(node=OutputNode(kwargs=FrozenDict({}), inputs=(AVStream(node=InputNode(kwargs=FrozenDict({}), inputs=(), filename='input.mp4'), index=None, optional=False), VideoStream(node=FilterNode(kwargs=FrozenDict({'color': 'red', 'size': 'hd1080'}), inputs=(), name='color', input_typings=(), output_typings=(<StreamType.video: 'video'>,)), index=0, optional=False)), filename='output.mp4'), index=None, optional=False)"
            ]
          },
          "execution_count": 7,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "import ffmpeg\n",
        "\n",
        "# Initialize the input stream from a video file\n",
        "input_stream = ffmpeg.input(\"input.mp4\")\n",
        "\n",
        "ffmpeg.output(\n",
        "    input_stream,\n",
        "    ffmpeg.sources.color(color=\"red\", size=\"hd1080\"),\n",
        "    filename=\"output.mp4\",\n",
        ")"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "### Handling Stream Types with FFmpeg\n",
        "\n",
        "#### Understanding Typed Filters in FFmpeg\n",
        "FFmpeg classifies its filters based on the type of media stream they process: some are intended for video streams, while others are for audio streams. This type-specific approach ensures that each filter operates on the appropriate kind of data. The typed-ffmpeg library enforces this classification through both static type checking (compatible with tools like mypy) and runtime validation, minimizing errors and streamlining filter application.\n",
        "\n",
        "#### Example: Applying Filters Correctly by Stream Type\n",
        "\n",
        "Consider the following code where we initialize an input stream and apply different filters:\n",
        "\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 8,
      "metadata": {},
      "outputs": [
        {
          "ename": "FFMpegTypeError",
          "evalue": "Expected input 0 to have audio component, got VideoStream",
          "output_type": "error",
          "traceback": [
            "\u001b[0;31mFFMpegTypeError\u001b[0m\u001b[0;31m:\u001b[0m Expected input 0 to have audio component, got VideoStream\n"
          ]
        }
      ],
      "source": [
        "import ffmpeg\n",
        "\n",
        "# Initialize an input stream from a video file\n",
        "input1 = ffmpeg.input(\n",
        "    \"input1.mp4\"\n",
        ")  # The input stream here is an AVStream, capable of handling both audio and video operations.\n",
        "\n",
        "# Apply a reverse filter, which is specifically a video filter, to the stream\n",
        "video = (\n",
        "    input1.reverse()\n",
        ")  # The 'reverse' filter is applied, resulting in a VideoStream output.\n",
        "\n",
        "# Attempting to apply an audio filter (amix) to a video stream results in an error\n",
        "ffmpeg.filters.amix(\n",
        "    video\n",
        ")  # This line will raise an exception because 'amix' is an audio filter, incompatible with a VideoStream."
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "\n",
        "In this example, the `reverse` filter, which is designed for video streams, successfully transforms the input into a reversed video stream. However, when attempting to apply the `amix` filter, which is intended for audio streams, to the reversed video stream, the code will raise an exception. This error occurs because typed-ffmpeg recognizes the mismatch between the stream type (video) and the expected input type for the `amix` filter (audio).\n",
        "\n",
        "By incorporating these type checks, typed-ffmpeg aids in preventing common mistakes, such as applying an audio filter to a video stream or vice versa, thereby ensuring that filters are applied correctly and efficiently.\n",
        "\n",
        "### Working with Multiple Inputs\n",
        "Certain filters accept multiple inputs. When using such filters with typed-ffmpeg, ensure that the exact number of required streams is passed, as validated by static type checking:\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 9,
      "metadata": {},
      "outputs": [
        {
          "data": {
            "image/png": "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",
            "image/svg+xml": [
              "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n",
              "<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
              " \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
              "<!-- Generated by graphviz version 2.43.0 (0)\n",
              " -->\n",
              "<!-- Title: %3 Pages: 1 -->\n",
              "<svg width=\"624pt\" height=\"98pt\"\n",
              " viewBox=\"0.00 0.00 624.00 98.00\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
              "<g id=\"graph0\" class=\"graph\" transform=\"scale(1 1) rotate(0) translate(4 94)\">\n",
              "<title>%3</title>\n",
              "<polygon fill=\"white\" stroke=\"transparent\" points=\"-4,4 -4,-94 620,-94 620,4 -4,4\"/>\n",
              "<!-- 6c9fb38b22c60f2a -->\n",
              "<g id=\"node1\" class=\"node\">\n",
              "<title>6c9fb38b22c60f2a</title>\n",
              "<polygon fill=\"#99cc00\" stroke=\"black\" points=\"96,-90 0,-90 0,-54 96,-54 96,-90\"/>\n",
              "<text text-anchor=\"middle\" x=\"48\" y=\"-68.9\" font-family=\"Helvetica,sans-Serif\" font-size=\"12.00\">&#45;i input1.mp4</text>\n",
              "</g>\n",
              "<!-- 55895a53fb3f9a46 -->\n",
              "<g id=\"node3\" class=\"node\">\n",
              "<title>55895a53fb3f9a46</title>\n",
              "<polygon fill=\"#ffcc00\" stroke=\"black\" points=\"380,-63 176,-63 176,-27 380,-27 380,-63\"/>\n",
              "<text text-anchor=\"middle\" x=\"278\" y=\"-41.9\" font-family=\"Helvetica,sans-Serif\" font-size=\"12.00\">[0][1] overlay= x=10:y=10 [s0]</text>\n",
              "</g>\n",
              "<!-- 6c9fb38b22c60f2a&#45;&gt;55895a53fb3f9a46 -->\n",
              "<g id=\"edge1\" class=\"edge\">\n",
              "<title>6c9fb38b22c60f2a&#45;&gt;55895a53fb3f9a46</title>\n",
              "<path fill=\"none\" stroke=\"black\" d=\"M96.24,-66.41C116.53,-64 141.18,-61.08 165.67,-58.18\"/>\n",
              "<polygon fill=\"black\" stroke=\"black\" points=\"166.25,-61.64 175.76,-56.99 165.42,-54.69 166.25,-61.64\"/>\n",
              "<text text-anchor=\"middle\" x=\"136\" y=\"-67.8\" font-family=\"Times,serif\" font-size=\"14.00\">0 &#45;&gt; 0</text>\n",
              "</g>\n",
              "<!-- 69c6090056d9ef87 -->\n",
              "<g id=\"node2\" class=\"node\">\n",
              "<title>69c6090056d9ef87</title>\n",
              "<polygon fill=\"#99cc00\" stroke=\"black\" points=\"96,-36 0,-36 0,0 96,0 96,-36\"/>\n",
              "<text text-anchor=\"middle\" x=\"48\" y=\"-14.9\" font-family=\"Helvetica,sans-Serif\" font-size=\"12.00\">&#45;i input2.mp4</text>\n",
              "</g>\n",
              "<!-- 69c6090056d9ef87&#45;&gt;55895a53fb3f9a46 -->\n",
              "<g id=\"edge2\" class=\"edge\">\n",
              "<title>69c6090056d9ef87&#45;&gt;55895a53fb3f9a46</title>\n",
              "<path fill=\"none\" stroke=\"black\" d=\"M96.24,-23.59C116.53,-26 141.18,-28.92 165.67,-31.82\"/>\n",
              "<polygon fill=\"black\" stroke=\"black\" points=\"165.42,-35.31 175.76,-33.01 166.25,-28.36 165.42,-35.31\"/>\n",
              "<text text-anchor=\"middle\" x=\"136\" y=\"-33.8\" font-family=\"Times,serif\" font-size=\"14.00\">1 &#45;&gt; 1</text>\n",
              "</g>\n",
              "<!-- 4016a4e9285c4b6f -->\n",
              "<g id=\"node4\" class=\"node\">\n",
              "<title>4016a4e9285c4b6f</title>\n",
              "<polygon fill=\"#99ccff\" stroke=\"black\" points=\"616,-63 468,-63 468,-27 616,-27 616,-63\"/>\n",
              "<text text-anchor=\"middle\" x=\"542\" y=\"-41.9\" font-family=\"Helvetica,sans-Serif\" font-size=\"12.00\">&#45;map [s0] output.mp4</text>\n",
              "</g>\n",
              "<!-- 55895a53fb3f9a46&#45;&gt;4016a4e9285c4b6f -->\n",
              "<g id=\"edge3\" class=\"edge\">\n",
              "<title>55895a53fb3f9a46&#45;&gt;4016a4e9285c4b6f</title>\n",
              "<path fill=\"none\" stroke=\"black\" d=\"M380.3,-45C405.99,-45 433.29,-45 457.96,-45\"/>\n",
              "<polygon fill=\"black\" stroke=\"black\" points=\"457.99,-48.5 467.99,-45 457.99,-41.5 457.99,-48.5\"/>\n",
              "<text text-anchor=\"middle\" x=\"424\" y=\"-48.8\" font-family=\"Times,serif\" font-size=\"14.00\">s0 &#45;&gt; 0</text>\n",
              "</g>\n",
              "</g>\n",
              "</svg>\n"
            ],
            "text/plain": [
              "OutputStream(node=OutputNode(kwargs=FrozenDict({}), inputs=(VideoStream(node=FilterNode(kwargs=FrozenDict({'x': 10, 'y': 10}), inputs=(AVStream(node=InputNode(kwargs=FrozenDict({}), inputs=(), filename='input1.mp4'), index=None, optional=False), AVStream(node=InputNode(kwargs=FrozenDict({}), inputs=(), filename='input2.mp4'), index=None, optional=False)), name='overlay', input_typings=(<StreamType.video: 'video'>, <StreamType.video: 'video'>), output_typings=(<StreamType.video: 'video'>,)), index=0, optional=False),), filename='output.mp4'), index=None, optional=False)"
            ]
          },
          "execution_count": 9,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "import ffmpeg\n",
        "\n",
        "# Initialize two input streams\n",
        "input1 = ffmpeg.input(\"input1.mp4\")\n",
        "input2 = ffmpeg.input(\"input2.mp4\")\n",
        "\n",
        "# Overlay one stream over the other and output to a new file\n",
        "(input1.overlay(input2, x=10, y=10).output(filename=\"output.mp4\"))"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "The process of overlaying two video streams is illustrated in the diagram:\n"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "\n",
        "### Handling Multiple Outputs\n",
        "Some filters, when applied, generate multiple output streams. typed-ffmpeg facilitates handling these scenarios with clear and concise code:"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 13,
      "metadata": {},
      "outputs": [
        {
          "data": {
            "image/png": "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",
            "image/svg+xml": [
              "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n",
              "<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
              " \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
              "<!-- Generated by graphviz version 2.43.0 (0)\n",
              " -->\n",
              "<!-- Title: %3 Pages: 1 -->\n",
              "<svg width=\"1276pt\" height=\"98pt\"\n",
              " viewBox=\"0.00 0.00 1276.00 98.00\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
              "<g id=\"graph0\" class=\"graph\" transform=\"scale(1 1) rotate(0) translate(4 94)\">\n",
              "<title>%3</title>\n",
              "<polygon fill=\"white\" stroke=\"transparent\" points=\"-4,4 -4,-94 1272,-94 1272,4 -4,4\"/>\n",
              "<!-- 6c9fb38b22c60f2a -->\n",
              "<g id=\"node1\" class=\"node\">\n",
              "<title>6c9fb38b22c60f2a</title>\n",
              "<polygon fill=\"#99cc00\" stroke=\"black\" points=\"96,-90 0,-90 0,-54 96,-54 96,-90\"/>\n",
              "<text text-anchor=\"middle\" x=\"48\" y=\"-68.9\" font-family=\"Helvetica,sans-Serif\" font-size=\"12.00\">&#45;i input1.mp4</text>\n",
              "</g>\n",
              "<!-- 568fcbb30610d67a -->\n",
              "<g id=\"node3\" class=\"node\">\n",
              "<title>568fcbb30610d67a</title>\n",
              "<polygon fill=\"#ffcc00\" stroke=\"black\" points=\"368,-63 176,-63 176,-27 368,-27 368,-63\"/>\n",
              "<text text-anchor=\"middle\" x=\"272\" y=\"-41.9\" font-family=\"Helvetica,sans-Serif\" font-size=\"12.00\">[0][1] feedback [s0#0][s0#1]</text>\n",
              "</g>\n",
              "<!-- 6c9fb38b22c60f2a&#45;&gt;568fcbb30610d67a -->\n",
              "<g id=\"edge1\" class=\"edge\">\n",
              "<title>6c9fb38b22c60f2a&#45;&gt;568fcbb30610d67a</title>\n",
              "<path fill=\"none\" stroke=\"black\" d=\"M96.08,-66.27C116.55,-63.78 141.42,-60.76 165.91,-57.78\"/>\n",
              "<polygon fill=\"black\" stroke=\"black\" points=\"166.49,-61.24 176,-56.55 165.65,-54.29 166.49,-61.24\"/>\n",
              "<text text-anchor=\"middle\" x=\"136\" y=\"-67.8\" font-family=\"Times,serif\" font-size=\"14.00\">0 &#45;&gt; 0</text>\n",
              "</g>\n",
              "<!-- 69c6090056d9ef87 -->\n",
              "<g id=\"node2\" class=\"node\">\n",
              "<title>69c6090056d9ef87</title>\n",
              "<polygon fill=\"#99cc00\" stroke=\"black\" points=\"96,-36 0,-36 0,0 96,0 96,-36\"/>\n",
              "<text text-anchor=\"middle\" x=\"48\" y=\"-14.9\" font-family=\"Helvetica,sans-Serif\" font-size=\"12.00\">&#45;i input2.mp4</text>\n",
              "</g>\n",
              "<!-- 69c6090056d9ef87&#45;&gt;568fcbb30610d67a -->\n",
              "<g id=\"edge2\" class=\"edge\">\n",
              "<title>69c6090056d9ef87&#45;&gt;568fcbb30610d67a</title>\n",
              "<path fill=\"none\" stroke=\"black\" d=\"M96.08,-23.73C116.55,-26.22 141.42,-29.24 165.91,-32.22\"/>\n",
              "<polygon fill=\"black\" stroke=\"black\" points=\"165.65,-35.71 176,-33.45 166.49,-28.76 165.65,-35.71\"/>\n",
              "<text text-anchor=\"middle\" x=\"136\" y=\"-33.8\" font-family=\"Times,serif\" font-size=\"14.00\">1 &#45;&gt; 1</text>\n",
              "</g>\n",
              "<!-- 2130a2288dd12cf3 -->\n",
              "<g id=\"node4\" class=\"node\">\n",
              "<title>2130a2288dd12cf3</title>\n",
              "<polygon fill=\"#ffcc00\" stroke=\"black\" points=\"877,-90 477,-90 477,-54 877,-54 877,-90\"/>\n",
              "<text text-anchor=\"middle\" x=\"677\" y=\"-68.9\" font-family=\"Helvetica,sans-Serif\" font-size=\"12.00\">[s0#0] drawtext= text=Hello World:fontsize=12:x=10:y=10 [s1]</text>\n",
              "</g>\n",
              "<!-- 568fcbb30610d67a&#45;&gt;2130a2288dd12cf3 -->\n",
              "<g id=\"edge3\" class=\"edge\">\n",
              "<title>568fcbb30610d67a&#45;&gt;2130a2288dd12cf3</title>\n",
              "<path fill=\"none\" stroke=\"black\" d=\"M368.25,-51.38C398.01,-53.38 432.1,-55.66 466.51,-57.96\"/>\n",
              "<polygon fill=\"black\" stroke=\"black\" points=\"466.49,-61.47 476.7,-58.65 466.96,-54.49 466.49,-61.47\"/>\n",
              "<text text-anchor=\"middle\" x=\"422.5\" y=\"-59.8\" font-family=\"Times,serif\" font-size=\"14.00\">s0#0 &#45;&gt; 0</text>\n",
              "</g>\n",
              "<!-- 19ef002edaad9258 -->\n",
              "<g id=\"node5\" class=\"node\">\n",
              "<title>19ef002edaad9258</title>\n",
              "<polygon fill=\"#ffcc00\" stroke=\"black\" points=\"877,-36 477,-36 477,0 877,0 877,-36\"/>\n",
              "<text text-anchor=\"middle\" x=\"677\" y=\"-14.9\" font-family=\"Helvetica,sans-Serif\" font-size=\"12.00\">[s0#1] drawtext= text=Hello World:fontsize=12:x=10:y=10 [s2]</text>\n",
              "</g>\n",
              "<!-- 568fcbb30610d67a&#45;&gt;19ef002edaad9258 -->\n",
              "<g id=\"edge4\" class=\"edge\">\n",
              "<title>568fcbb30610d67a&#45;&gt;19ef002edaad9258</title>\n",
              "<path fill=\"none\" stroke=\"black\" d=\"M368.22,-34.52C374.23,-33.97 380.2,-33.46 386,-33 412.07,-30.94 439.49,-29.1 466.63,-27.48\"/>\n",
              "<polygon fill=\"black\" stroke=\"black\" points=\"466.84,-30.97 476.62,-26.89 466.43,-23.98 466.84,-30.97\"/>\n",
              "<text text-anchor=\"middle\" x=\"422.5\" y=\"-36.8\" font-family=\"Times,serif\" font-size=\"14.00\">s0#1 &#45;&gt; 0</text>\n",
              "</g>\n",
              "<!-- 7740585adf7a38c4 -->\n",
              "<g id=\"node6\" class=\"node\">\n",
              "<title>7740585adf7a38c4</title>\n",
              "<polygon fill=\"#99ccff\" stroke=\"black\" points=\"1120,-90 965,-90 965,-54 1120,-54 1120,-90\"/>\n",
              "<text text-anchor=\"middle\" x=\"1042.5\" y=\"-68.9\" font-family=\"Helvetica,sans-Serif\" font-size=\"12.00\">&#45;map [s1] output1.mp4</text>\n",
              "</g>\n",
              "<!-- 2130a2288dd12cf3&#45;&gt;7740585adf7a38c4 -->\n",
              "<g id=\"edge5\" class=\"edge\">\n",
              "<title>2130a2288dd12cf3&#45;&gt;7740585adf7a38c4</title>\n",
              "<path fill=\"none\" stroke=\"black\" d=\"M877.03,-72C904.14,-72 930.74,-72 954.37,-72\"/>\n",
              "<polygon fill=\"black\" stroke=\"black\" points=\"954.66,-75.5 964.66,-72 954.66,-68.5 954.66,-75.5\"/>\n",
              "<text text-anchor=\"middle\" x=\"921\" y=\"-75.8\" font-family=\"Times,serif\" font-size=\"14.00\">s1 &#45;&gt; 0</text>\n",
              "</g>\n",
              "<!-- 48e564c7d0d061fa -->\n",
              "<g id=\"node7\" class=\"node\">\n",
              "<title>48e564c7d0d061fa</title>\n",
              "<polygon fill=\"#99ccff\" stroke=\"black\" points=\"1120,-36 965,-36 965,0 1120,0 1120,-36\"/>\n",
              "<text text-anchor=\"middle\" x=\"1042.5\" y=\"-14.9\" font-family=\"Helvetica,sans-Serif\" font-size=\"12.00\">&#45;map [s2] output2.mp4</text>\n",
              "</g>\n",
              "<!-- 19ef002edaad9258&#45;&gt;48e564c7d0d061fa -->\n",
              "<g id=\"edge6\" class=\"edge\">\n",
              "<title>19ef002edaad9258&#45;&gt;48e564c7d0d061fa</title>\n",
              "<path fill=\"none\" stroke=\"black\" d=\"M877.03,-18C904.14,-18 930.74,-18 954.37,-18\"/>\n",
              "<polygon fill=\"black\" stroke=\"black\" points=\"954.66,-21.5 964.66,-18 954.66,-14.5 954.66,-21.5\"/>\n",
              "<text text-anchor=\"middle\" x=\"921\" y=\"-21.8\" font-family=\"Times,serif\" font-size=\"14.00\">s2 &#45;&gt; 0</text>\n",
              "</g>\n",
              "<!-- 60b1ae96ef226d7a -->\n",
              "<g id=\"node8\" class=\"node\">\n",
              "<title>60b1ae96ef226d7a</title>\n",
              "<polygon fill=\"lightgrey\" stroke=\"black\" points=\"1268,-63 1214,-63 1214,-27 1268,-27 1268,-63\"/>\n",
              "</g>\n",
              "<!-- 7740585adf7a38c4&#45;&gt;60b1ae96ef226d7a -->\n",
              "<g id=\"edge7\" class=\"edge\">\n",
              "<title>7740585adf7a38c4&#45;&gt;60b1ae96ef226d7a</title>\n",
              "<path fill=\"none\" stroke=\"black\" d=\"M1120.03,-61.48C1148.82,-57.53 1180.22,-53.21 1203.67,-49.99\"/>\n",
              "<polygon fill=\"black\" stroke=\"black\" points=\"1204.42,-53.42 1213.85,-48.59 1203.47,-46.49 1204.42,-53.42\"/>\n",
              "<text text-anchor=\"middle\" x=\"1167\" y=\"-61.8\" font-family=\"Times,serif\" font-size=\"14.00\">out &#45;&gt; 0</text>\n",
              "</g>\n",
              "<!-- 48e564c7d0d061fa&#45;&gt;60b1ae96ef226d7a -->\n",
              "<g id=\"edge8\" class=\"edge\">\n",
              "<title>48e564c7d0d061fa&#45;&gt;60b1ae96ef226d7a</title>\n",
              "<path fill=\"none\" stroke=\"black\" d=\"M1120.32,-22.1C1144.66,-24.19 1171.59,-27.32 1196,-32 1198.62,-32.5 1201.31,-33.1 1204.01,-33.75\"/>\n",
              "<polygon fill=\"black\" stroke=\"black\" points=\"1203.12,-37.13 1213.68,-36.31 1204.91,-30.37 1203.12,-37.13\"/>\n",
              "<text text-anchor=\"middle\" x=\"1167\" y=\"-35.8\" font-family=\"Times,serif\" font-size=\"14.00\">out &#45;&gt; 1</text>\n",
              "</g>\n",
              "</g>\n",
              "</svg>\n"
            ],
            "text/plain": [
              "GlobalStream(node=GlobalNode(kwargs=FrozenDict({}), inputs=(OutputStream(node=OutputNode(kwargs=FrozenDict({}), inputs=(VideoStream(node=FilterNode(kwargs=FrozenDict({'text': 'Hello World', 'fontsize': 12, 'x': 10, 'y': 10}), inputs=(VideoStream(node=FilterNode(kwargs=FrozenDict({}), inputs=(AVStream(node=InputNode(kwargs=FrozenDict({}), inputs=(), filename='input1.mp4'), index=None, optional=False), AVStream(node=InputNode(kwargs=FrozenDict({}), inputs=(), filename='input2.mp4'), index=None, optional=False)), name='feedback', input_typings=(<StreamType.video: 'video'>, <StreamType.video: 'video'>), output_typings=(<StreamType.video: 'video'>, <StreamType.video: 'video'>)), index=0, optional=False),), name='drawtext', input_typings=(<StreamType.video: 'video'>,), output_typings=(<StreamType.video: 'video'>,)), index=0, optional=False),), filename='output1.mp4'), index=None, optional=False), OutputStream(node=OutputNode(kwargs=FrozenDict({}), inputs=(VideoStream(node=FilterNode(kwargs=FrozenDict({'text': 'Hello World', 'fontsize': 12, 'x': 10, 'y': 10}), inputs=(VideoStream(node=FilterNode(kwargs=FrozenDict({}), inputs=(AVStream(node=InputNode(kwargs=FrozenDict({}), inputs=(), filename='input1.mp4'), index=None, optional=False), AVStream(node=InputNode(kwargs=FrozenDict({}), inputs=(), filename='input2.mp4'), index=None, optional=False)), name='feedback', input_typings=(<StreamType.video: 'video'>, <StreamType.video: 'video'>), output_typings=(<StreamType.video: 'video'>, <StreamType.video: 'video'>)), index=1, optional=False),), name='drawtext', input_typings=(<StreamType.video: 'video'>,), output_typings=(<StreamType.video: 'video'>,)), index=0, optional=False),), filename='output2.mp4'), index=None, optional=False))), index=None, optional=False)"
            ]
          },
          "execution_count": 13,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "import ffmpeg\n",
        "\n",
        "# Initialize input streams\n",
        "input1 = ffmpeg.input(\"input1.mp4\")\n",
        "input2 = ffmpeg.input(\"input2.mp4\")\n",
        "\n",
        "# Apply a filter that generates multiple outputs\n",
        "video, feedout = input1.feedback(input2)  # Generates two output streams\n",
        "\n",
        "# Process and output each stream separately\n",
        "o1 = video.drawtext(text=\"Hello World\", fontsize=12, x=10, y=10).output(\n",
        "    filename=\"output1.mp4\"\n",
        ")\n",
        "o2 = feedout.drawtext(text=\"Hello World\", fontsize=12, x=10, y=10).output(\n",
        "    filename=\"output2.mp4\"\n",
        ")\n",
        "\n",
        "# Merge the outputs\n",
        "ffmpeg.merge_outputs(o1, o2)"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "The generation of multiple output streams from a single filter application is depicted:\n",
        "\n",
        "\n",
        "### Dynamic Input Filters\n",
        "Some filters accept a variable number of inputs. In these cases, typed-ffmpeg offers flexibility but requires careful input management:"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 16,
      "metadata": {},
      "outputs": [
        {
          "data": {
            "image/png": "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",
            "image/svg+xml": [
              "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n",
              "<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
              " \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
              "<!-- Generated by graphviz version 2.43.0 (0)\n",
              " -->\n",
              "<!-- Title: %3 Pages: 1 -->\n",
              "<svg width=\"337pt\" height=\"98pt\"\n",
              " viewBox=\"0.00 0.00 337.00 98.00\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
              "<g id=\"graph0\" class=\"graph\" transform=\"scale(1 1) rotate(0) translate(4 94)\">\n",
              "<title>%3</title>\n",
              "<polygon fill=\"white\" stroke=\"transparent\" points=\"-4,4 -4,-94 333,-94 333,4 -4,4\"/>\n",
              "<!-- 6c9fb38b22c60f2a -->\n",
              "<g id=\"node1\" class=\"node\">\n",
              "<title>6c9fb38b22c60f2a</title>\n",
              "<polygon fill=\"#99cc00\" stroke=\"black\" points=\"96,-90 0,-90 0,-54 96,-54 96,-90\"/>\n",
              "<text text-anchor=\"middle\" x=\"48\" y=\"-68.9\" font-family=\"Helvetica,sans-Serif\" font-size=\"12.00\">&#45;i input1.mp4</text>\n",
              "</g>\n",
              "<!-- 156d3556a11ced7c -->\n",
              "<g id=\"node3\" class=\"node\">\n",
              "<title>156d3556a11ced7c</title>\n",
              "<polygon fill=\"#ffcc00\" stroke=\"black\" points=\"329,-63 176,-63 176,-27 329,-27 329,-63\"/>\n",
              "<text text-anchor=\"middle\" x=\"252.5\" y=\"-41.9\" font-family=\"Helvetica,sans-Serif\" font-size=\"12.00\">[0][1] amix= inputs=2 </text>\n",
              "</g>\n",
              "<!-- 6c9fb38b22c60f2a&#45;&gt;156d3556a11ced7c -->\n",
              "<g id=\"edge1\" class=\"edge\">\n",
              "<title>6c9fb38b22c60f2a&#45;&gt;156d3556a11ced7c</title>\n",
              "<path fill=\"none\" stroke=\"black\" d=\"M96.22,-65.7C116.88,-62.95 141.78,-59.63 165.53,-56.46\"/>\n",
              "<polygon fill=\"black\" stroke=\"black\" points=\"166.17,-59.91 175.62,-55.12 165.25,-52.97 166.17,-59.91\"/>\n",
              "<text text-anchor=\"middle\" x=\"136\" y=\"-66.8\" font-family=\"Times,serif\" font-size=\"14.00\">0 &#45;&gt; 0</text>\n",
              "</g>\n",
              "<!-- 69c6090056d9ef87 -->\n",
              "<g id=\"node2\" class=\"node\">\n",
              "<title>69c6090056d9ef87</title>\n",
              "<polygon fill=\"#99cc00\" stroke=\"black\" points=\"96,-36 0,-36 0,0 96,0 96,-36\"/>\n",
              "<text text-anchor=\"middle\" x=\"48\" y=\"-14.9\" font-family=\"Helvetica,sans-Serif\" font-size=\"12.00\">&#45;i input2.mp4</text>\n",
              "</g>\n",
              "<!-- 69c6090056d9ef87&#45;&gt;156d3556a11ced7c -->\n",
              "<g id=\"edge2\" class=\"edge\">\n",
              "<title>69c6090056d9ef87&#45;&gt;156d3556a11ced7c</title>\n",
              "<path fill=\"none\" stroke=\"black\" d=\"M96.22,-24.3C116.88,-27.05 141.78,-30.37 165.53,-33.54\"/>\n",
              "<polygon fill=\"black\" stroke=\"black\" points=\"165.25,-37.03 175.62,-34.88 166.17,-30.09 165.25,-37.03\"/>\n",
              "<text text-anchor=\"middle\" x=\"136\" y=\"-35.8\" font-family=\"Times,serif\" font-size=\"14.00\">1 &#45;&gt; 1</text>\n",
              "</g>\n",
              "</g>\n",
              "</svg>\n"
            ],
            "text/plain": [
              "AudioStream(node=FilterNode(kwargs=FrozenDict({'inputs': 2}), inputs=(AVStream(node=InputNode(kwargs=FrozenDict({}), inputs=(), filename='input1.mp4'), index=None, optional=False), AVStream(node=InputNode(kwargs=FrozenDict({}), inputs=(), filename='input2.mp4'), index=None, optional=False)), name='amix', input_typings=(<StreamType.audio: 'audio'>, <StreamType.audio: 'audio'>), output_typings=(<StreamType.audio: 'audio'>,)), index=0, optional=False)"
            ]
          },
          "execution_count": 16,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "import ffmpeg\n",
        "\n",
        "# Correct usage with the expected number of inputs\n",
        "input1 = ffmpeg.input(\"input1.mp4\")\n",
        "input2 = ffmpeg.input(\"input2.mp4\")\n",
        "ffmpeg.filters.amix(input1, input2, inputs=2)"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "Incorrect input numbers will trigger exceptions, providing immediate feedback without needing to execute FFmpeg:\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 18,
      "metadata": {},
      "outputs": [
        {
          "ename": "FFMpegValueError",
          "evalue": "Expected 3 inputs, got 2",
          "output_type": "error",
          "traceback": [
            "\u001b[0;31mFFMpegValueError\u001b[0m\u001b[0;31m:\u001b[0m Expected 3 inputs, got 2\n"
          ]
        }
      ],
      "source": [
        "import ffmpeg\n",
        "\n",
        "# Incorrect usage leading to a ValueError\n",
        "input1 = ffmpeg.input(\"input1.mp4\")\n",
        "input2 = ffmpeg.input(\"input2.mp4\")\n",
        "f = ffmpeg.filters.amix(input1, input2, inputs=3)  # This will raise a ValueError"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "Fortunately, typed-ffmpeg offers automatic detection for input variables in many of ffmpeg's dynamic input filters."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 19,
      "metadata": {},
      "outputs": [
        {
          "data": {
            "image/png": "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",
            "image/svg+xml": [
              "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n",
              "<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
              " \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
              "<!-- Generated by graphviz version 2.43.0 (0)\n",
              " -->\n",
              "<!-- Title: %3 Pages: 1 -->\n",
              "<svg width=\"337pt\" height=\"98pt\"\n",
              " viewBox=\"0.00 0.00 337.00 98.00\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
              "<g id=\"graph0\" class=\"graph\" transform=\"scale(1 1) rotate(0) translate(4 94)\">\n",
              "<title>%3</title>\n",
              "<polygon fill=\"white\" stroke=\"transparent\" points=\"-4,4 -4,-94 333,-94 333,4 -4,4\"/>\n",
              "<!-- 6c9fb38b22c60f2a -->\n",
              "<g id=\"node1\" class=\"node\">\n",
              "<title>6c9fb38b22c60f2a</title>\n",
              "<polygon fill=\"#99cc00\" stroke=\"black\" points=\"96,-90 0,-90 0,-54 96,-54 96,-90\"/>\n",
              "<text text-anchor=\"middle\" x=\"48\" y=\"-68.9\" font-family=\"Helvetica,sans-Serif\" font-size=\"12.00\">&#45;i input1.mp4</text>\n",
              "</g>\n",
              "<!-- 156d3556a11ced7c -->\n",
              "<g id=\"node3\" class=\"node\">\n",
              "<title>156d3556a11ced7c</title>\n",
              "<polygon fill=\"#ffcc00\" stroke=\"black\" points=\"329,-63 176,-63 176,-27 329,-27 329,-63\"/>\n",
              "<text text-anchor=\"middle\" x=\"252.5\" y=\"-41.9\" font-family=\"Helvetica,sans-Serif\" font-size=\"12.00\">[0][1] amix= inputs=2 </text>\n",
              "</g>\n",
              "<!-- 6c9fb38b22c60f2a&#45;&gt;156d3556a11ced7c -->\n",
              "<g id=\"edge1\" class=\"edge\">\n",
              "<title>6c9fb38b22c60f2a&#45;&gt;156d3556a11ced7c</title>\n",
              "<path fill=\"none\" stroke=\"black\" d=\"M96.22,-65.7C116.88,-62.95 141.78,-59.63 165.53,-56.46\"/>\n",
              "<polygon fill=\"black\" stroke=\"black\" points=\"166.17,-59.91 175.62,-55.12 165.25,-52.97 166.17,-59.91\"/>\n",
              "<text text-anchor=\"middle\" x=\"136\" y=\"-66.8\" font-family=\"Times,serif\" font-size=\"14.00\">0 &#45;&gt; 0</text>\n",
              "</g>\n",
              "<!-- 69c6090056d9ef87 -->\n",
              "<g id=\"node2\" class=\"node\">\n",
              "<title>69c6090056d9ef87</title>\n",
              "<polygon fill=\"#99cc00\" stroke=\"black\" points=\"96,-36 0,-36 0,0 96,0 96,-36\"/>\n",
              "<text text-anchor=\"middle\" x=\"48\" y=\"-14.9\" font-family=\"Helvetica,sans-Serif\" font-size=\"12.00\">&#45;i input2.mp4</text>\n",
              "</g>\n",
              "<!-- 69c6090056d9ef87&#45;&gt;156d3556a11ced7c -->\n",
              "<g id=\"edge2\" class=\"edge\">\n",
              "<title>69c6090056d9ef87&#45;&gt;156d3556a11ced7c</title>\n",
              "<path fill=\"none\" stroke=\"black\" d=\"M96.22,-24.3C116.88,-27.05 141.78,-30.37 165.53,-33.54\"/>\n",
              "<polygon fill=\"black\" stroke=\"black\" points=\"165.25,-37.03 175.62,-34.88 166.17,-30.09 165.25,-37.03\"/>\n",
              "<text text-anchor=\"middle\" x=\"136\" y=\"-35.8\" font-family=\"Times,serif\" font-size=\"14.00\">1 &#45;&gt; 1</text>\n",
              "</g>\n",
              "</g>\n",
              "</svg>\n"
            ],
            "text/plain": [
              "AudioStream(node=FilterNode(kwargs=FrozenDict({'inputs': 2}), inputs=(AVStream(node=InputNode(kwargs=FrozenDict({}), inputs=(), filename='input1.mp4'), index=None, optional=False), AVStream(node=InputNode(kwargs=FrozenDict({}), inputs=(), filename='input2.mp4'), index=None, optional=False)), name='amix', input_typings=(<StreamType.audio: 'audio'>, <StreamType.audio: 'audio'>), output_typings=(<StreamType.audio: 'audio'>,)), index=0, optional=False)"
            ]
          },
          "execution_count": 19,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "import ffmpeg\n",
        "\n",
        "input1 = ffmpeg.input(\"input1.mp4\")\n",
        "input2 = ffmpeg.input(\"input2.mp4\")\n",
        "\n",
        "ffmpeg.filters.amix(\n",
        "    input1, input2\n",
        ")  # typed-ffmpeg will auto detect the correct inputs value"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "\n",
        "### Dynamic Output Filters\n",
        "Similarly, some filters yield a dynamic number of outputs. typed-ffmpeg ensures that any mismatches are quickly identified:\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 22,
      "metadata": {},
      "outputs": [
        {
          "ename": "FFMpegValueError",
          "evalue": "Specified index 2 is out of range for video outputs 2",
          "output_type": "error",
          "traceback": [
            "\u001b[0;31mFFMpegValueError\u001b[0m\u001b[0;31m:\u001b[0m Specified index 2 is out of range for video outputs 2\n"
          ]
        }
      ],
      "source": [
        "import ffmpeg\n",
        "\n",
        "# Initialize input and apply a split filter\n",
        "input1 = ffmpeg.input(\"input1.mp4\")\n",
        "split = input1.split(outputs=2)\n",
        "\n",
        "# Correctly accessing the outputs\n",
        "video0 = split.video(0)\n",
        "video1 = split.video(1)\n",
        "\n",
        "# Incorrectly accessing an out-of-range output will raise an error\n",
        "video2 = split.video(2)  # This will raise a ValueError"
      ]
    }
  ],
  "metadata": {
    "kernelspec": {
      "display_name": ".venv",
      "language": "python",
      "name": "python3"
    },
    "language_info": {
      "codemirror_mode": {
        "name": "ipython",
        "version": 3
      },
      "file_extension": ".py",
      "mimetype": "text/x-python",
      "name": "python",
      "nbconvert_exporter": "python",
      "pygments_lexer": "ipython3",
      "version": "3.12.3"
    }
  },
  "nbformat": 4,
  "nbformat_minor": 2
}
